package com.github.mobile.ui; import static com.github.mobile.ui.NavigationDrawerObject.TYPE_ITEM_MENU; import static com.github.mobile.ui.NavigationDrawerObject.TYPE_ITEM_ORG; import static com.github.mobile.ui.NavigationDrawerObject.TYPE_SEPERATOR; import static com.github.mobile.ui.NavigationDrawerObject.TYPE_SUBHEADER; import android.content.Context; import android.graphics.Typeface; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.github.mobile.R; import com.github.mobile.util.AvatarLoader; import java.util.ArrayList; import java.util.List; import org.eclipse.egit.github.core.User; public class NavigationDrawerAdapter extends BaseAdapter { private final Context context; private final AvatarLoader avatars; private final LayoutInflater inflater; private List<User> orgs = new ArrayList<>(); private List<NavigationDrawerObject> data; public NavigationDrawerAdapter(Context context, List<User> orgs, final AvatarLoader avatars) { this.orgs.addAll(orgs); this.context = context; this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); this.avatars = avatars; createData(); } private void createData() { orgs.remove(0); String[] names = new String[] { context.getString(R.string.home), context.getString(R.string.gist), context.getString(R.string.issue_dashboard), context.getString(R.string.bookmarks) }; String[] icons = context.getResources().getStringArray(R.array.navigation_drawer_icon_list); data = new ArrayList<>(); int amount = names.length + orgs.size() + 2; for (int i = 0; i < amount; i++) { if (i < names.length) data.add(new NavigationDrawerObject(names[i], icons[i], TYPE_ITEM_MENU)); else if (i == names.length) data.add(new NavigationDrawerObject(TYPE_SEPERATOR)); else if (i == names.length + 1) data.add(new NavigationDrawerObject("Organizations", TYPE_SUBHEADER)); else data.add(new NavigationDrawerObject(orgs.get(i - names.length - 2).getLogin(), TYPE_ITEM_ORG, orgs.get(i - names.length - 2))); } } public void setOrgs(List<User> orgs) { this.orgs.addAll(orgs); this.orgs.remove(0); notifyDataSetChanged(); } @Override public int getCount() { return data.size(); } @Override public NavigationDrawerObject getItem(int position) { return data.get(position); } @Override public long getItemId(int position) { return data.get(position).getType(); } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; final NavigationDrawerObject obj = data.get(position); if (convertView == null || obj.getType() != ((ViewHolder) convertView.getTag()).type) { viewHolder = new ViewHolder(); switch (obj.getType()) { case TYPE_ITEM_MENU: convertView = inflater.inflate(R.layout.navigation_drawer_list_item_text, parent, false); viewHolder.name = (TextView) convertView.findViewById(R.id.navigation_drawer_item_name); viewHolder.iconString = (TextView) convertView.findViewById(R.id.navigation_drawer_item_text_icon); break; case TYPE_ITEM_ORG: convertView = inflater.inflate(R.layout.navigation_drawer_list_item_image, parent, false); viewHolder.name = (TextView) convertView.findViewById(R.id.navigation_drawer_item_name); viewHolder.iconDrawable = (ImageView) convertView.findViewById(R.id .navigation_drawer_item_drawable_icon); break; case TYPE_SUBHEADER: convertView = inflater.inflate(R.layout.navigation_drawer_list_subheader, parent, false); viewHolder.name = (TextView) convertView.findViewById(R.id.navigation_drawer_item_name); convertView.setEnabled(false); convertView.setOnClickListener(null); break; default: convertView = inflater.inflate(R.layout.navigation_drawer_list_seperator, parent, false); convertView.setEnabled(false); convertView.setOnClickListener(null); break; } viewHolder.type = obj.getType(); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } switch (obj.getType()) { case TYPE_ITEM_MENU: Typeface font = Typeface.createFromAsset(context.getAssets(), "octicons.ttf"); viewHolder.iconString.setTypeface(font); viewHolder.iconString.setText(obj.getIconString()); viewHolder.name.setText(obj.getTitle()); break; case TYPE_ITEM_ORG: avatars.bind(viewHolder.iconDrawable, obj.getUser()); viewHolder.name.setText(obj.getTitle()); break; case TYPE_SUBHEADER: viewHolder.name.setText(obj.getTitle()); break; } return convertView; } private class ViewHolder { int type; TextView name; TextView iconString; ImageView iconDrawable; } }